/**
 * 結果一覧（トラック競技）チーム競技画面 コントローラ
 */
APP.controller('ResultTrackBCtrl', function($http, $window, $timeout, $anchorScroll) {
  
  // thisを保持（Ajax内のthisと混同を防ぐ為）
  var pthis = this;
  // HTMLファイル名取得
  var fileName = window.location.href.split('/').pop().split(".html").shift();


  /**
   * 初期処理
   */
  pthis.Initialize = function () {

    // 表示用データをクリア
    pthis.datTaikai = [];
    pthis.datResultTrackB = [];
    pthis.datRekidaiKirokuAll = undefined;
    pthis.datRekidaiKiroku = undefined;
    pthis.prmRekidai = "";
    // オーダー確定フラグ
    pthis.MemberDetailOrder = "0";
    pthis.MemberDetail = undefined;
    // 並び替えを追加（初期値は順位）
    pthis.prmSort = "1";
    // タイムレース集計一覧
    pthis.datTimeraceShukei = [];
    pthis.datTimeraceShukeiInfo = undefined;


    // Promiseを使用しJSONを並列取得し、表示処理を実施する
    Promise.all([new Promise(function (resolve, reject) {

      //=== 大会情報JSONの取得を行う
      $http({
        method  : AJAX_METHOD_GET,
        url     : '../../Taikai.json' + '?a=' + START_TIMESTAMP,
      }).then(function successCallback(response) {
        // 大会情報データ
        pthis.datTaikai = response.data;
        resolve();
      }, function errorCallback(response) {
        reject();
      });

    }), new Promise(function (resolve, reject) {

      //=== 結果一覧（トラック競技）チーム競技画面 一覧JSONの取得を行う
      $http({
        method  : AJAX_METHOD_GET,
        url     : './'+fileName+'.json' + '?a=' + START_TIMESTAMP,
      }).then(function successCallback(response) {
        // 全結果一覧（トラック競技）チーム競技データ
        pthis.datResultTrackB = response.data;
        resolve();
      }, function errorCallback(response) {
        reject();
      });
      
    }), new Promise(function (resolve, reject) {

      //=== タイムレース集計（一覧）画面 一覧JSONの取得を行う
      $http({
        method  : AJAX_METHOD_GET,
        url     : '../../timeraceshukei/TimeraceShukei.json' + '?a=' + START_TIMESTAMP,
      }).then(function successCallback(response) {
        // 全タイムレース集計（一覧）データ
        pthis.datTimeraceShukei = response.data;
        resolve();
      }, function errorCallback(response) {
        reject();
      });
      
    })]).then(function () {

      //=== 歴代記録ダイアログ用JSONを取得
      $http({
        method  : AJAX_METHOD_GET,
        url     : '../../rekidai/RekidaiKiroku.json' + '?a=' + START_TIMESTAMP,
      }).then(function successCallback(response) {
        // 全歴代記録データ
        pthis.datRekidaiKirokuAll = response.data.RekidaiKirokuList;
        // キーを決定する
        var RekidaiKirokuKey = "";
        if (!!pthis.datResultTrackB.RekidaiKyogiList) {
          // 合体競技の場合、
          RekidaiKirokuKey = pthis.datResultTrackB.RekidaiKyogiList[0].KyogiNo + "-" + pthis.datResultTrackB.SubNo;
          pthis.prmRekidai = pthis.datResultTrackB.RekidaiKyogiList[0].KyogiNo;
        } else {
          // 通常の場合、
          RekidaiKirokuKey = pthis.datResultTrackB.KyogiNo + "-" + pthis.datResultTrackB.SubNo;
        }
        // 歴代記録データ
        pthis.datRekidaiKiroku = pthis.datRekidaiKirokuAll[RekidaiKirokuKey];
      }, function errorCallback(response) {
        // JSON取得エラー
      });

      //=== タイムレース集計結果があるか
      for (var i in pthis.datTimeraceShukei.TimeraceShukeiList) {
        var timeraceShukei = pthis.datTimeraceShukei.TimeraceShukeiList[i];
        // 同じ競技NOデータを探す
        if (timeraceShukei.Details.startsWith(pthis.datResultTrackB.DetailKey)) {
          pthis.datTimeraceShukeiInfo = timeraceShukei;
          break;
        }
      }
        
    }).catch(function () {
      // JSON取得エラー
    });

  };

  /**
   * 歴代記録ボタンクリックイベント
   */
  pthis.ShowRekidai = function () {

    // 歴代記録ダイアログを表示する
    if (!!pthis.datRekidaiKiroku) {
      RekidaiDialogShow();
    }

  }

  /**
   * 歴代記録ダイアログ競技チェンジイベント
   */
  pthis.ChangeRekidai = function () {

    // キーを生成
    var RekidaiKirokuKey = pthis.prmRekidai + "-" + pthis.datResultTrackB.SubNo;
    // 歴代記録データ
    pthis.datRekidaiKiroku = pthis.datRekidaiKirokuAll[RekidaiKirokuKey];

  }

  /**
   * チーム行クリックイベント
   */
  pthis.ShowMember = function (TeamOrder, TeamTitle, MemberList) {

    pthis.MemberDetailOrder = TeamOrder;
    pthis.MemberDetail = MemberList;

    // メンバーダイアログを表示する
    if ( !!TeamTitle ) {
      if (pthis.MemberDetailOrder == '1') {
        if (!!MemberList && MemberList.length > 0) {
          MemberDialogShow(TeamTitle);
        } else {
          MemberDialogNoOrderShow(TeamTitle);
        }
      } else {
        MemberDialogWaitShow(TeamTitle);
      }
    }

  }

  /**
   * タイムレースリンククリックイベント
   */
  pthis.ClickLinkTimerace = function (link) {
    // 詳細ページ遷移
    if (!!link) {
      // タイムレース集計のパスに合わせる
      window.location.href = "../../timeraceshukei/" + link;
    }
  }


  // 初期処理を実行
  pthis.Initialize();

});


$(function() {
  // 1 / 100 と 1 / 1000 の切り替えイベント
  $('#kirokuview').on('change',function(){
    const c = $(this).val();
    $('td.Kiroku').each(function(i, e) {
      $(e).html($(e).attr(c));
    });
  });

  // 順位・レーンの切り替え時に記録表示を変更
  $('input[name="prmSort"]').on('change',function(){
    $('#kirokuview').change();
  });
});